package cn.tedu.simple;

import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class SimpleConsumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //设置连接信息
        ConnectionFactory cf = new ConnectionFactory();
        cf.setHost("192.168.144.160");
        cf.setUsername("guest");
        cf.setPassword("guest");
        //创建tcp连接
        Connection nc = cf.newConnection();
        Channel cc = nc.createChannel();
        //创建队列-生产者和消费者都要创建队列，为了避免找不到队列而报异常
        //队列有一个特点：如果该队列已经存在，忽略创建命令；如果队列不存在才会执行创建命令
        //队列另一个特点：队列一旦创建，属性不可改变
        cc.queueDeclare("helloworld",false,false,false,null);
        //消费数据
        /*
          第一个参数：队列名
          第二个参数：autoACK，先写成true
          第三个参数：deliverCallback，处理消息的回调函数
          第四个参数：cancelCallback，取消接收数据时的回调函数
         */
        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String s, Delivery delivery) throws IOException {
                //消息封装到了delivery对象中
                byte[] body = delivery.getBody();
                String msg = new String(body);
                System.out.println(msg);
            }
        };
        CancelCallback cancelCallback = new CancelCallback() {
            @Override
            public void handle(java.lang.String s) throws IOException {

            }
        };
        cc.basicConsume("helloworld",true,deliverCallback,cancelCallback);
    }
}
